#ifndef IAPPPLATINTF_H
#define IAPPPLATINTF_H



#include <string>

/*
    【应用接口类】 IApplication由APP实现，用于APP接收基础平台返回的结果数据
*/
class IApplication
{
public:
    /*
        【函数】 基础平台数据回调接口
        【参数】 sOutputJSON 基础平台返回的请求结果数据，内容为JSON格式数据
    */
    virtual void PltfmResultData(const std::string& sOutputJSON)=0;

    /*
        【函数】 APP订阅数据回调接口
        【参数】 sOutputJSON 基础平台发布已订阅的数据，内容为JSON格式数据
    */
    virtual void PltfmIssueData(const std::string& sOutputJSON)= 0;

};

/*
    【平台接口类】 IAppPlatform 由基础平台实现，用于向基础平台注册、取消注册APP以及向基 础平台请求数据
*/
class IAppPlatform
{
public:

    virtual ~IAppPlatform()=0;

    /*
       【函数】 注册APP
       【参数】 pApp APP接口对象
               sInitJSON 初始化数据
    */
    virtual bool RegisterApp(IApplication* pApp,const std::string& sInitJSON)=0;

    /*
    【函数】 注销APP 【参数】 pApp APP接口对象
    */
    virtual bool UnregisterApp(IApplication* pApp)=0;   

    /*
    【函数】 请求基础平台数据 【参数】 sInputJSON 输入APP的请求数据，内容为JSON格式数据
    */
    virtual int RequestSyncData(const std::string& sInputJSON, std::string& sOutputJSON, int nTimeoutSec)=0;

    /*
    【函数】 请求基础平台数据 【参数】 sInputJSON 输入APP的请求数据，内容为JSON格式数据
    */
    virtual int RequestASyncData(const std::string& sInputJSON, int nTimeoutSec)=0;

};

#ifdef __cplusplus
extern "C"{
#endif
  
/*
【导出函数】 GetAppPlatform 由基础平台实现，用于应用程序获取平台接口对象指针APPPLATFORMSHARED_EXPORT
*/
  
bool GetAppPlatform(IAppPlatform** ppAppPlatform);

#ifdef __cplusplus
}
#endif



#endif // IAPPPLATINTF_H
